#ifndef OpenGL_HellGate_h
#define OpenGL_HellGate_h
#include "Model3d.h"
#include "Utils.h"
#include "GL/glut.h"
#include <iostream>
#include <cmath>
#include "sweep.h"
#include "Vector3d.h"
using namespace std;



class HellGate: public Model3d {
public:
	void draw();
	static void initTexture();

private:
	void TopBeamBack(int seg_length, Vector3d square[],int len);
	void TopBeamFront(int seg_length, Vector3d square[],int len);
	void BottomBeamFront(int seg_length, Vector3d square[],int len);
	void BottomBeamBack(int seg_length, Vector3d square[],int len);
	void MainBeamJoinersFront(Vector3d square1[]);
	void MainBeamJoinersBack(Vector3d square1[]);
	void MainBeamJoinerTop(Vector3d square3[]);
	void MainBeamJoinerBottom(Vector3d square4[]);
	void SupportFront(Vector3d square1[]);
	void SupportBack(Vector3d square1[]);
	void RailRoadGround();
	void GroundSupport();
	void SideNets();
public :void DrawMainBridge();
	void TexturedQuad (float width,float height,float upper_extend=0,float lower_extend=0,bool repeatTexture=false,float force_rep=1);
	void TexturedQuad2 (float width,float height,float upper_extend=0,float lower_extend=0,bool repeatTexture=false,float force_rep=1);
	void BaseSweep(float height, float upper_extend, float lower_extend,bool repeatTexture=false);
	void CastleBase();
	void CastleSideSide(float scale,float offset);
	void TopSideOutOut(float scale,float offset);
	void sideDiskAndCylinderOut(double scale);
	void CastleFront();
	void CastleCenterSideSweep(float scale);
	void CastleCenterDisk(float a);
	void TopSweep(float height, float upper_extend, float lower_extend,float width1,float width2,bool repeatTexture);
	void CastleTopRelling(float offSet);
	void DrawCastle();
	void DrawPillar();
public :void DrawPillers();
public :void DrawCastles();

};

#endif
